package com.xh.demo.commons.enums;


import com.xh.demo.commons.message.CommonMessage;
import lombok.AllArgsConstructor;

/**
 * @author wen
 * @apiNote 返回信息枚举类
 * @since 2021/12/11
 */
@AllArgsConstructor
public enum MessageEnum implements CommonMessage {

    // 基本错误
    SUCCESS(200, "操作成功"),
    USER_UNAUTHORIZED(403, "权限不够，请联系管理员！"),
    SYSTEM_PAGE_IS_NOT_EXIST(404, "抱歉, 您访问的页面不存在!"),
    FAILED(410, "操作失败"),
    REQUEST_LIMITED(500, "服务器繁忙，请稍后再试"),

    // 100开头定义请求异常类型
    UNKNOWN_ERROR(10001, "未知错误"),
    CONTENT_TYPE_NOT_SUPPORTED(10002, "不支持内容类型"),
    REQUEST_METHOD_NOT_SUPPORTED(10003, "不支持的请求类型"),
    PARAMETER_VERIFICATION_ERROR(10020, "参数不合法"),
    SYSTEM_SECURITY_CODE_ERROR(10021, "验证码已过期，请刷新再试"),
    INPUT_SECURITY_CODE_ERROR(10022, "验证码不正确"),
    PARAMETER_VERIFICATION_ERROR_ID(10023, "参数不合法，id不能为空"),
    INVALID_REQUEST(10024, "无效的request对象"),
    INVALID_RESPONSE(10025, "无效的response对象"),

    // 200开头为用户信息相关错误
    USER_DATA_ERROR(20002, "用户不存在"),
    USER_NAME_OR_PASSWORD_ERROR(20003, "用户名或密码错误"),
    USER_IS_DISABLE(20004, "用户被禁用"),
    USER_SESSION_NOT_EXITS(20005, "用户未登录或登录已超时"),
    USER_NAME_IS_EXIST(20006, "用户名已存在"),
    USER_NICK_NAME_IS_EXIST(20007, "昵称已存在"),
    USER_AUTHENTICATION_FAILED(20009, "认证失败，请联系管理员"),
    USER_NOT_LOGGED_IN(200010, "请登录后再进行此操作"),
    PASSWORD_MISMATCH(20011, "两次密码输入不一致"),
    USER_PASSWORD_ERROR(20012, "当前密码输入错误"),
    USER_IS_NOT_EXIST(20013, "该用户不存在"),
    USER_IS_UNAVAILABLE(20014, "该账户已被冻结，暂时无法操作"),

    // 300开头为文件相关错误
    FILE_WRITE_ERROR(30001, "文件上传失败"),
    FILE_IS_NOT_PICTURE(30002, "不支持的文件类型"),
    MAX_UPLOAD_SIZE_EXCEEDED(30003, "单个文件大小不能超过1MB"),
    FILE_IS_NOT_EXIST(30004, "图片文件不能为空"),

    // 500开头为邮件相关信息
    SEND_EMAIL_FAIL(50001, "邮件发送失败"),
    EMAIL_INCORRECT_FORMAT(50002, "邮箱格式不正确"),
    EMAIL_IS_ERROR(50003, "邮箱不正确，请填写收到激活码的邮箱地址"),
    CODE_IS_ERROR(50004, "验证码不正确或已失效"),
    USER_EMAIL_IS_EXIST(50005, "邮箱已被注册"),
    USER_EMAIL_IS_ACTIVE(50006, "您的邮箱已是激活状态"),
    EMAIL_OR_CODE_IS_ERROR(50007, "邮箱或验证码不正确或已失效"),

    // 服务保护相关信息
    CODE_60001(60001, "接口限流"),
    CODE_60002(60002, "服务降级"),
    CODE_60003(60003, "热点参数限流"),
    CODE_60004(60004, "触发系统保护规则"),
    CODE_60005(60005, "授权规则不通过"),
    //TODO 在这里追加定义更多返回信息

    ;

    private final int code;

    private final String msg;

    @Override
    public int getCode() {
        return this.code;
    }

    @Override
    public String getMsg() {
        return this.msg;
    }

}
